#===istalismanplugin===
# -*- coding: utf-8 -*-

# $Revision: 55 $
# $Author: rchiganov@gmail.com $
# $Date: 2013-08-23 04:02:47 +0000 (Fri, 23 Aug 2013) $

#---------------------------------------------------------------------------------------------------

import datetime

#---------------------------------------------------------------------------------------------------

BLOKNOT_LIMIT = 50
BLOKNOT_FILE  = 'bloknot.txt'

#---------------------------------------------------------------------------------------------------

def bloknot_run ( ptype, psource, pparameters ):
	global BLOKNOT_LIMIT

	LFILE = 'dynamic/%s' % BLOKNOT_FILE
	vika_check_file(LFILE, u'{ u\'limit\': %d }' % BLOKNOT_LIMIT )
	lbloknot = eval(open(LFILE, 'r').read())
	BLOKNOT_LIMIT = lbloknot[u'limit']

	ljid = get_true_jid(psource[1] + '/' + psource[2])
	ldate = datetime.datetime.now().strftime(u'%Y.%m.%d')
	ltime = datetime.datetime.now().strftime(u'%H:%M:%S')
	lparam = pparameters.split()

	if not lbloknot.has_key(ljid):
		lbloknot[ljid] = [ ]

	if not lbloknot.has_key(u'date'):
		lbloknot[u'date'] = ldate

	if lbloknot[u'date'] != ldate and BLOKNOT_LIMIT != 0:
		ldate2 = datetime.datetime.strptime(ldate, u'%Y.%m.%d')
		for lnote in lbloknot.keys():
			if lnote not in [ u'limit', u'date' ]:
				lindex = 0
				for lphrase in lbloknot[lnote]:
					ldate1 = datetime.datetime.strptime(lphrase[2:12], u'%Y.%m.%d') + datetime.timedelta(days=90)
					if ldate2 >= ldate1:
						lbloknot[lnote].pop(lindex)
					lindex += 1
		write_file(LFILE, str(lbloknot))
		lbloknot[u'date'] = ldate

	#-----------------------------------------------------------------------------------------------
	# Выводим содержимое блокнота юзеру
	if len(lparam) == 0:
		if len(lbloknot[ljid]) == 0:
			reply(ptype, psource, u'нет ничего... *PARDON*')
			return
		lanswer = u'Блокнот:'
		lindex = 0
		for lphrase in lbloknot[ljid]:
			lanswer += u'\n--------------------\n'
			lanswer += u'{:<3} : '.format(str(lindex).decode('utf-8'))
			lanswer += lphrase
			lindex += 1
		lanswer += u'\n--------------------'
		if ptype == 'public':
			reply(ptype, psource, u'в привате')
		reply('private', psource, lanswer)
		return

	#-----------------------------------------------------------------------------------------------
	# Чистим блокнот юзера
	if lparam[0] == u'чисть':
		if BLOKNOT_LIMIT == 0:
			reply(ptype, psource, u'Редактирование блокнота временно отключено администратором бота')
			return
		if len(lparam) > 1:
			reply(ptype, psource, u'не понимаю я тебя *PARDON*')
			return
		del lbloknot[ljid]
		write_file(LFILE, str(lbloknot))
		reply(ptype, psource, u'удалила')

	#-----------------------------------------------------------------------------------------------
	# Смотрим и устанавливаем лимит на количество фраз
	elif lparam[0] == u'лимит':
		if len(lparam) > 2:
			reply(ptype, psource, u'что то ты не то пишешь *SCRATCH*')
			return
		if len(lparam) == 1:
			reply(ptype, psource, u'Лимит на количество записей в блокноте = %d' % BLOKNOT_LIMIT)
			return
		laccess = user_level(psource[1] + '/' + psource[2], psource[1])
		if laccess >= 80:
			try:
				llimit = int(lparam[1])
			except ValueError:
				reply(ptype, psource, u'это не лимит *NO*')
				return
			BLOKNOT_LIMIT = llimit
			lbloknot[u'limit'] = llimit
			write_file(LFILE, str(lbloknot))
			reply(ptype, psource, u'записала *WRITE*')
		else:
			reply(ptype, psource, u'фиг те *PUNISH*')

	#-----------------------------------------------------------------------------------------------
	# Добавляем фразу в блокнот
	elif lparam[0] == u'+':
		if len(lparam) == 1:
			reply(ptype, psource, u'что записать то? *SCRATCH*')
			return
		if BLOKNOT_LIMIT == 0:
			reply(ptype, psource, u'Редактирование блокнота временно отключено администратором бота')
			return
		if len(lbloknot[ljid]) >= BLOKNOT_LIMIT:
			reply(ptype, psource, u'Лимит, равный %d, превышен. Для записи удалите что-нибудь из блокнота.' % BLOKNOT_LIMIT)
			return
		lphrase = pparameters[1:len(pparameters)].strip()
		lbloknot[ljid].append(u'[ ' + ldate + u' ' + ltime + u' ] ' + lphrase)
		write_file(LFILE, str(lbloknot))
		reply(ptype, psource, u'записала *WRITE*')

	#-----------------------------------------------------------------------------------------------
	# Удаляем фразу из блокнота по индексу
	elif lparam[0] == u'-':
		if BLOKNOT_LIMIT == 0:
			reply(ptype, psource, u'Редактирование блокнота временно отключено администратором бота')
			return
		if len(lparam) != 2:
			reply(ptype, psource, u'что то ты не то пишешь... читай хелп по команде...')
			return
		try:
			lindex = int(lparam[1])
		except ValueError:
			reply(ptype, psource, u'это разве индекс удаляемой фразы? *SCRATCH*')
			return
		if len(lbloknot[ljid]) < lindex + 1:
			reply(ptype, psource, u'нет такой фразы...')
			return
		lbloknot[ljid].pop(lindex)
		write_file(LFILE, str(lbloknot))
		reply(ptype, psource, u'удалила')

	#-----------------------------------------------------------------------------------------------
	else:
		reply(ptype, psource, u'чего то ты не то пишешь... *SCRATCH*')

#---------------------------------------------------------------------------------------------------

register_command_handler(bloknot_run, 'блокнот', [ 'фан', 'блокнот', 'все' ], 10, """
Ваш личный блокнотик. Всё введенные вами записи привязываются к вашему JID и доступны в любой конференции где сидит бот. Сделанная запись в блокноте может храниться не более 3-х месяцев (очищается автоматически).

Описание параметров команды:
без параметров - Показывает все записи из вашего блокнота в приват
чисть - Удаляет все записи пользователя в блокноте
лимит - Без дополнительных параметров позволяет просматривать лимит на количество записей в блокноте. С параметром устанавливает лимит на количество фраз, которое может добавить пользователь в блокнот (доступно только администратору\овнеру бота). Если лимит установить будет = 0, то возможность записи в блокнот отключается.
    Синтаксис:
        блокнот лимит
        блокнот лимит <число>
+ - Добавление фразы в блокнот.
    Синтаксис:
        блокнот + <добавляемая фраза>
- - Удаляем фразу из блокнота по индексу
    Синтаксис:
        блокнот - <индекс фразы>
""", 'блокнот [параметр] [дополнительные параметры]', [ 'блокнот', 'блокнот чисть', 'блокнот лимит', 'блокнот лимит 30', 'блокнот + любая ваша фраза', 'блокнот - 5' ])

#---------------------------------------------------------------------------------------------------
